﻿#ifndef SHAREDDEFINE_H
#define SHAREDDEFINE_H

#include <QString>
#include <QStringList>
#include <QDir>
#include <QFileInfo>
#include <QMessageBox>


#define _N_Debug_

#define _N_MAC_
//#define _N_WINDOW_

#ifdef _N_Debug_
#include <QDebug>
#endif

#define L8BStr(a) QString::fromLocal8Bit(a)

/**********************************************************************
 * 文件名
 **********************************************************************/
#define FILE_NAME_SETTING               L8BStr("setting.xml")
// 题目表数据库[文件名]
#define FILE_NAME_QUES_SQLITE           L8BStr("questionsLib.db")

/**********************************************************************
 * 各个窗口名
 **********************************************************************/
#define WINDOW_TITLE_MAINWINDOW         L8BStr("APK@CTF")
#define WINDOW_TITLE_IMPORT_QUES        L8BStr("导入题目")
#define WINDOW_TITLE_IMPORT_SQLITE      L8BStr("从备份中导入")


// 数据库表名
#define QUES_TABLE_NAME       L8BStr("QuestionsTable")

/**********************************************************************
 * 题目结构体，以及一些字符串宏
 **********************************************************************/
#define QUES_PROTECTIONPOSITION     L8BStr("protectionPosition")
#define QUES_DIFFICULTY             L8BStr("difficulty")
#define QUES_INNERNUMBER            L8BStr("innerNumber")
#define QUES_FILEMD5                L8BStr("fileMd5")
#define QUES_FLAG                   L8BStr("flag")
#define QUES_KNOWLEDGEPOINTS        L8BStr("knowledgePoints")
#define QUES_FROMWHERE              L8BStr("fromWhere")
struct stQuestion{
    QString protectionPosition;
    QString difficulty;
    QString innerNumber;
    QString fileMd5;
    QString flag;
    QString knowledgePoints;
    QString fromWhere;
};

// 在设置文件中标签名
#define DIR_BASEQUESLIB L8BStr("baseQuesLibDir")
#define DIR_EXPQUES     L8BStr("exportQuesDir")
struct stSetting{
    QString dir_baseQuesLib;    // 存储题库的目录
    QString dir_exportQues;     // 导出题目的目录
};

/**********************************************************************
 * MainWindow 列名
 **********************************************************************/
#define TABCOLNAME_PROTECTIONPOSITION     L8BStr("防护位置")
#define TABCOLNAME_DIFFICULTY             L8BStr("难度")
#define TABCOLNAME_INNERNUMBER            L8BStr("题目序号")
#define TABCOLNAME_FILEMD5                L8BStr("文件Md5")
#define TABCOLNAME_FLAG                   L8BStr("flag")
#define TABCOLNAME_KNOWLEDGEPOINTS        L8BStr("知识点")
#define TABCOLNAME_FROMWHERE              L8BStr("题目来源")

/**
 * @brief 将一个文件夹中的文件(包含子文件夹)复制到另外一个文件夹中。
 * 注意，复制到的文件夹必须已经存在。
 * @param qstrFromDir   源文件夹路径
 * @param qstrToDir     目标文件夹路径
 * @return              是否成功复制
 */
bool  copyFiles_Folder2Folder(const QString &qstrFromDir, const QString &qstrToDir);

/**
 * @brief 获取文件夹下所有文件名列表
 * @param qtr_dir       文件夹路径
 * @return              路径下文件名列表
 */
QStringList getFilesNameWithDir(const QString qtr_dir);


#endif // SHAREDDEFINE_H
